package kr.co.bettersoft.carrotmemberstore.activity;
/**
 * MainActivityHome
 * 메인 탭 - 홈 화면.
 * 
 * 2개 프레임.
 *  - 좌측 : 가맹점 PR 이미지.(없으면 자체 기본 이미지 사용)
 *  - 우측 : 홈1화면 : 적립 버튼 / 조회 버튼
 *          홈2화면 : 1단계에서 적립 버튼을 누른경우
 *                QR코드 스캔 버튼 / 고객 마일리지 값 보여줌 / 결재금액(마일리지 적립용) 입력 창 / 캐럿 적립 버튼 / 화면 닫기 버튼
 *          홈3화면 :  1단계에서 조회 버튼을 누른경우
 *                QR코드 스캔 버튼 / 고객 마일리지 값 보여줌 / 사용할 캐럿 입력창 / 캐럿 사용 버튼 / 화면 닫기 버튼
 *      @ 홈1화면에서 버튼을 눌러 홈2화면 또는 홈3하면으로 변경. 홈2(또는3)화면에서 적립(또는 사용) 이후 처리 결과를 보여주고 홈1화면으로 돌아감. 화면 닫기 시에도 홈1화면으로 돌아감.
 *      @ QR코드 스캔 버튼을 누르면 전면 카메라를 통해 고객 QR 코드 스캔하여 서버로부터 사용자 정보를 가져옴. 
 *      
 */
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.Calendar;

import org.json.JSONException;
import org.json.JSONObject;

import kr.co.bettersoft.carrotmemberstore.R;
import kr.co.bettersoft.carrotmemberstore.adapter.ButtonAdapter2;
import kr.co.bettersoft.carrotmemberstore.common.CarrotMemberStoreRest;
import kr.co.bettersoft.carrotmemberstore.common.CommonConstant;
import kr.co.bettersoft.carrotmemberstore.domain.CheckMileageMileage;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivityHome extends Activity {

	String TAG = "MainActivityHome";
	final int CHECK_MILEAGE_EXIST = 201;
	final int REGISTER_MILEAGE = 202;
	final int REGISTER_CASH_MILEAGE = 203;
	final int UPDATE_MILEAGE = 204;
//	final int UPDATE_LOG_TO_SERVER = 205;		// 로그 기능 보류


//	int responseCode = 0;
//	URL postUrl2 = null;
//	HttpURLConnection connection2 = null;
//	String controllerName ="";
//	String methodName ="";
//	String serverName = CommonConstant.serverName;  //  "http://checkmileage.mcarrot.net";  // checkmileage.onemobileservice.com test *** 

	CarrotMemberStoreRest carrotMemberStoreRest;
	String callResult = "";
	String tempstr = "";
	JSONObject jsonObject;
//	carrotMemberStoreRest = new CarrotMemberStoreRest(); // oncreate
	
	// 서버 로깅
	int isUpdating = 0;
	String logViewName = "";


	//	Boolean connectedBool = false;

	ImageView storeImgView;										// 홈 가맹점  이미지 뷰
	View homeLayout1, homeLayout2, homeLayout3;		// 홈 레이아웃. 홈화면 1,2,3   - 원하는 화면을 보여주기 위함
	// 홈 화면 1.  적립,조회 버튼.
	Button  homeSaveMileageBtn1, homeInquiryMileageBtn1;			// 홈 적립 버튼, 조회 버튼
	// 홈 화면 2.  적립 화면.
	Button qrScan2, saveCarrotBtn2, saveCarrotCashBtn2, closeBtn2;
	TextView myCarrotAmount2;	// 내 마일리지
	EditText saveCarrotAmount2;	// 적립할마일리지
	// 홈 화면 3.  조회(및 사용) 화면.
	Button qrScan3, useCarrotBtn3, closeBtn3;
	TextView myCarrotAmount3;		// 내 마일리지
	EditText useCarrotAmount3;		// 쓸 마일리지

	// 세자리마다 콤마
	//	  // 세자리로 끊어서 쉼표 보여주고, 소숫점 셋째짜리까지 보여준다.
	//	DecimalFormat df = new DecimalFormat("###,###.####");
	// 세자리로 끊어서 쉼표 보여준다.
	DecimalFormat df = new DecimalFormat("###,###");
	// 값 셋팅시, StackOverFlow를 막기 위해서, 바뀐 변수를 저장해준다.
	String result="";

	// 금액 9자리 넘지 않도록 설정하기 위한 임시변수
	String setMoney;

	// 하단 닫기 버튼 보일지 숨길지 여부
	Boolean closeBtnEnable;

	// 전달받은 가맹점 정보
	String merchantId;
	String countryCode;
	String languageCode;
	//	String profileImageUrl;
	//	Bitmap profileImage = null;
	String prPicture01Url;
	Bitmap prPicture01 = null;


	// 유저(고객) 정보 
	String userID = "";				//QR 스캔한 유저 아이디
	String userMileage = "0";		// 유저 마일리지 값
	String carrotAmount = "";		// 가맹점에서 입력한   결재 금액/이용 금액

	int runMode = 1;				// 실행 모드.  1=홈. 2=적립모드. 3=소비모드

	// 시간 관련
	Calendar c = Calendar.getInstance();
	int todayYear = 0;						// 지금 -  년 월 일 시 분
	int todayMonth = 0;
	int todayDay = 0;
	int todayHour = 0;
	int todayMinute = 0;
	int todaySecond = 0;
	String nowTime = "";

	// 키보드 자동 숨기기 위한 부모 레이아웃(리스너 달아서 키보드 숨김)과 입력 매니저
	View parentLayout;
	InputMethodManager imm;		// 키보드 제어

	Boolean returnValue= false;		// 컨펌에서 사용하는 리턴값

	// 진행바
	ProgressBar pb1;		// 중단 로딩 진행바

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			try{
				Bundle b = msg.getData();		
				if(b.getInt("showToast")==1){		// 화면에 토스트 띄우기
					Toast.makeText(MainActivityHome.this, b.getString("msg"), Toast.LENGTH_SHORT).show();
				}
				if(b.getInt("init")==1){		//닫기 및 성공시 ::  적립용. 마일리지 값, 소비용 마일리지 값. 스캔한 아이디.  --> 나중에 아이디 값을 통해 진행 여부 판별함.
					myCarrotAmount2.setText("");					// 적립 화면. 고객 마일리지
					saveCarrotAmount2.setText("");					// 적립 화면. 적립 금액
					myCarrotAmount3.setText("");					// 소비 화면. 고객 마일리지
					useCarrotAmount3.setText("");					// 소비 화면. 소비 금액
					userID = "";									// 스캔한 고객 아이디 
				}
				if(b.getInt("showImage")==1){		//이미지 적용
					//				    storeImgView.setImageBitmap(profileImage);
					storeImgView.setImageBitmap(prPicture01);
				}
				if(b.getInt("showMileage")==1){		// 적립용. 고객 마일리지 화면에 표시
					hidePb();
					myCarrotAmount2.setText(userMileage);
				}else if(b.getInt("showMileage")==2){		// 소비용. 고객 마일리지 화면에 표시
					hidePb();
					myCarrotAmount3.setText(userMileage);
				}
				if(b.getInt("showAlert")==1){					 // 경고창 . 
					//
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)							
					.setMessage(b.getString("msg"))
					//					.setIcon(android.R.drawable.ic_dialog_alert)		// 경고창. 삼각형 느낌표..?
					.setIcon(R.drawable.ic_dialog_img)		// 경고창. 삼각형 느낌표 --> 어플 아이콘으로바꿈.
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int whichButton) {
							// 그냥 사용자 확인 용이기 때문에 추가 조작 없음.
						}})
						.setNegativeButton("", null).show();
				}
				if(b.getInt("showConfirm")==2){						// 확인창. 마일리지 적립 확인. yn
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)				
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_dialog_img)
					.setCancelable(true)
					.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							
							handler.sendEmptyMessage(REGISTER_MILEAGE);
							
						}
					})
					.setNegativeButton(getString(R.string.no), null)		 
					.show();
				}else if(b.getInt("showConfirm")==3){				// 확인창. 마일리지 소비 확인. yn
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)		
					.setIcon(R.drawable.ic_dialog_img)
					.setMessage(b.getString("msg"))
					.setCancelable(true)
					.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							
							handler.sendEmptyMessage(UPDATE_MILEAGE);
						}
					})
					.setNegativeButton(getString(R.string.no), null)		 
					.show();
				}else if(b.getInt("showConfirm")==4){						// 확인창. 마일리지 적립 확인. yn
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)				
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_dialog_img)
					.setCancelable(true)
					.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							handler.sendEmptyMessage(REGISTER_CASH_MILEAGE);
						}
					})
					.setNegativeButton(getString(R.string.no), null)		 
					.show();
				}
				if(b.getInt("order")==1){
					// 프로그래스바 실행
					if(pb1==null){
						pb1=(ProgressBar) findViewById(R.id.main_activity_home_progressbar1);
					}
					pb1.setVisibility(View.VISIBLE);
				}else if(b.getInt("order")==2){
					// 프로그래스바  종료
					if(pb1==null){
						pb1=(ProgressBar) findViewById(R.id.main_activity_home_progressbar1);
					}
					pb1.setVisibility(View.INVISIBLE);
				}

				switch (msg.what)
				{
				case CHECK_MILEAGE_EXIST   : runOnUiThread(new RunnableCheckMileageExist());		
				break;
				case REGISTER_MILEAGE   : runOnUiThread(new RunnableRegisterMileage());		
				break;	
				case REGISTER_CASH_MILEAGE   : runOnUiThread(new RunnableRegisterCashMileage());		
				break;
				case UPDATE_MILEAGE   : runOnUiThread(new RunnableUpdateMileage());		
				break;
				default : 
					break;
				}		
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		setContentView(R.layout.main_activity_home);

		carrotMemberStoreRest = new CarrotMemberStoreRest();
		
		// 이미지 뷰. 가맹점 PR 이미지
		storeImgView = (ImageView) findViewById(R.id.member_store_img);

		// 레이아웃.
		homeLayout1 = findViewById(R.id.main_home_layout1);
		homeLayout2 = findViewById(R.id.main_home_layout2);
		homeLayout3 = findViewById(R.id.main_home_layout3);

		// 홈1 화면 -- 적립버튼, 조회 버튼
		homeSaveMileageBtn1 = (Button) findViewById(R.id.main_home1_save_btn);
		homeInquiryMileageBtn1 = (Button) findViewById(R.id.main_home1_inquiry_btn);
		// 홈2 화면 -- QR 스캔버튼, 내 마일리지, 결재금액(적립용), 적립버튼, 닫기 버튼
		qrScan2 = (Button) findViewById(R.id.main_home2_qrscan_btn);
		myCarrotAmount2 = (TextView) findViewById(R.id.main_home2_mycarrot_amount);
		saveCarrotAmount2 = (EditText) findViewById(R.id.main_home2_savecarrot_amount);
		saveCarrotBtn2 = (Button) findViewById(R.id.main_home2_savecarrot_btn);
		saveCarrotCashBtn2 = (Button) findViewById(R.id.main_home2_savecarrot_cash_btn);

		closeBtn2 = (Button) findViewById(R.id.main_home2_close_btn);
		// 홈3 화면 -- QR 스캔버튼, 내 마일리지, 사용할캐럿(사용), 사용버튼, 닫기 버튼
		qrScan3 = (Button) findViewById(R.id.main_home3_qrscan_btn);
		myCarrotAmount3 = (TextView) findViewById(R.id.main_home3_mycarrot_amount);
		useCarrotAmount3 = (EditText) findViewById(R.id.main_home3_usecarrot_amount);
		useCarrotBtn3 = (Button) findViewById(R.id.main_home3_usecarrot_btn);
		closeBtn3 = (Button) findViewById(R.id.main_home3_close_btn);


		// 홈2,홈3 하단 닫기버튼은 화면 스케일에 따라 보일지 여부가 결정된다.
		checkCloseBtnEnable();


		// 홈1화면 적립버튼, 조회 버튼 리스너
		homeSaveMileageBtn1.setOnClickListener(new OnClickListener() {		// 홈1. 적립버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"homeSaveMileageBtn click");
				runMode = 2;		// 적립 모드
				homeLayout1.setVisibility(View.INVISIBLE);
				homeLayout2.setVisibility(View.VISIBLE);
				if(!closeBtnEnable){
					closeBtn2.setVisibility(View.INVISIBLE);
				}
				//로깅
				//				loggingToServer("CheckMileageMerchantAmassView");		//  	 *** 보류
			}
		});
		homeInquiryMileageBtn1.setOnClickListener(new OnClickListener() {	// 홈1. 조회버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"homeInquiryMileageBtn click");
				runMode = 3; 		// 조회/소비 모드
				homeLayout1.setVisibility(View.INVISIBLE);
				homeLayout3.setVisibility(View.VISIBLE);
				if(!closeBtnEnable){
					closeBtn3.setVisibility(View.INVISIBLE);
				}
				//로깅
				//				loggingToServer("CheckMileageMerchantCheckView");		 // *** 보류
			}
		});
		// 홈2화면 스캔버튼, 적립버튼, 닫기버튼 리스너
		qrScan2.setOnClickListener(new OnClickListener() {		// 홈2. QR스캔버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"qrScan2 click");


				Intent intent = new Intent(MainActivityHome.this,com.google.zxing.client.android.CaptureActivity.class);
				intent.setPackage("com.google.zxing.client.android");		
				try{
					startActivityForResult(intent, 1);
				}catch(Exception e){
					e.printStackTrace();
					Log.i("MainActivityHome", "error occured");
				}
			}
		});
		saveCarrotBtn2.setOnClickListener(new OnClickListener() {		// 홈2. 캐럿적립 버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"saveCarrotBtn2 click");
				hideKeyboard();
				carrotAmount = saveCarrotAmount2.getText()+"";
				if(userID.length()<1){
					showResultDialog(getString(R.string.scan_your_qr_code));						// "고객님의 QR코드를 스캔하여 주십시오."	
				}else{
					if(carrotAmount.length()>0){
						carrotAmount = removeComma(carrotAmount);	// 콤마 제거					
						carrotAmount = Integer.toString(Integer.parseInt(carrotAmount));
					}
					if(carrotAmount.length()<1 || (carrotAmount.equals("0"))){
						showResultDialog(getString(R.string.input_pay_amount));							// "결재 금액을 입력해 주십시오."
					}else{
						showConfirmDialog(2, getString(R.string.confirm_carrot_save));		// 캐럿을 적립하시겠습니까?. 카드적립은 2
					}
				}
			}
		});
		saveCarrotCashBtn2.setOnClickListener(new OnClickListener() {		// 홈2. 캐럿현금적립 버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"saveCarrotBtn2 click");
				hideKeyboard();
				//				new backgroundRegisterCashMileage().execute();
				carrotAmount = saveCarrotAmount2.getText()+"";
				if(userID.length()<1){
					showResultDialog(getString(R.string.scan_your_qr_code));						// "고객님의 QR코드를 스캔하여 주십시오."	
				}else{
					if(carrotAmount.length()>0){
						carrotAmount = removeComma(carrotAmount);	// 콤마 제거					
						carrotAmount = Integer.toString(Integer.parseInt(carrotAmount));
					}
					if(carrotAmount.length()<1 || (carrotAmount.equals("0"))){
						showResultDialog(getString(R.string.input_pay_amount));							// "결재 금액을 입력해 주십시오."
					}else{
						showConfirmDialog(4, getString(R.string.confirm_carrot_save));		// 캐럿을 적립하시겠습니까? . 현금적립은 4
					}
				}

			}
		});
		closeBtn2.setOnClickListener(new OnClickListener() {		// 홈2. 닫기 버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"closeBtn2 click");
				homeLayout1.setVisibility(View.VISIBLE);
				homeLayout2.setVisibility(View.INVISIBLE);
				init();			// 이전값 초기화.
				runMode = 1; 	// 홈 모드
				hideKeyboard();
			}
		});
		// 홈3화면 스캔버튼, 사용버튼, 닫기버튼 리스너
		qrScan3.setOnClickListener(new OnClickListener() {		// 홈3. QR스캔 버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"qrScan3 click");
				Intent intent = new Intent(MainActivityHome.this,com.google.zxing.client.android.CaptureActivity.class);
				intent.setPackage("com.google.zxing.client.android");
				try{
					startActivityForResult(intent, 2);
				}catch(Exception e){
					e.printStackTrace();
					Log.i("MainActivityHome", "error occured");
				}
			}
		});
		useCarrotBtn3.setOnClickListener(new OnClickListener() {		// 홈3. 캐럿사용 버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"useCarrotBtn3 click");
				hideKeyboard();									// 키보드 숨김
				carrotAmount = useCarrotAmount3.getText()+"";

				if(userID.length()<1){
					showResultDialog(getString(R.string.scan_your_qr_code));			// 고객님의 QR코드를 스캔하여 주십시오.
				}else{
					if(carrotAmount.length()>0){
						carrotAmount = removeComma(carrotAmount);	// 콤마 제거	
						carrotAmount = Integer.toString(Integer.parseInt(carrotAmount));	// 숫자를 문자로
					}
					if(carrotAmount.length()<1 || (carrotAmount.equals("0"))){
						showResultDialog(getString(R.string.input_use_amount));  		// 사용할 마일리지를 입력해 주십시오.
					}else if(Integer.parseInt(carrotAmount) > Integer.parseInt(myCarrotAmount3.getText()+"")){		
						showResultDialog(getString(R.string.not_enough_mileage));  		// 마일리지가 부족합니다.
						//					showMsg(getString(R.string.not_enough_mileage));
					}else{
						showConfirmDialog(3, getString(R.string.confirm_carrot_use));    // 캐럿을 사용하시겠습니까?
					}
				}
				
//				new backgroundUpdateMileage().execute();		// 비동기로 호출
			}
		});
		closeBtn3.setOnClickListener(new OnClickListener() {		// 홈3. 닫기 버튼
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"closeBtn3 click");
				homeLayout1.setVisibility(View.VISIBLE);
				homeLayout3.setVisibility(View.INVISIBLE);
				init();			// 이전값 초기화.
				runMode = 1; 	// 홈 모드
				hideKeyboard();
			}
		});

		// 부모 레이아웃 리스너 - 외부 터치 시 키보드 숨김 용도 
		parentLayout = findViewById(R.id.main_activity_home_parent_layout);		
		parentLayout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//Log.w(TAG,"parentLayout click");
				hideKeyboard();
			}
		});


		// 결재금액 3자리마다 콤마(,)를 넣는다.
		saveCarrotAmount2.addTextChangedListener(new TextWatcher(){
			@Override
			public void afterTextChanged(Editable s) {}
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				if((!s.toString().equals(""))&&(!s.toString().equals(result))){     // StackOverflow를 막기위해, "" 될때 에러 방지
					result = df.format(Long.parseLong(s.toString().replaceAll(",", "")));   // 에딧텍스트의 값을 변환하여, result에 저장.
					saveCarrotAmount2.setText(result);    // 결과 텍스트 셋팅.
					saveCarrotAmount2.setSelection(result.length());     // 커서를 제일 끝으로 보냄.
				}                
			}
		}); 
		useCarrotAmount3.addTextChangedListener(new TextWatcher(){
			@Override
			public void afterTextChanged(Editable s) {}
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				if((!s.toString().equals(""))&&(!s.toString().equals(result))){     // StackOverflow를 막기위해, "" 될때 에러 방지
					result = df.format(Long.parseLong(s.toString().replaceAll(",", "")));   // 에딧텍스트의 값을 변환하여, result에 저장.
					useCarrotAmount3.setText(result);    // 결과 텍스트 셋팅.
					useCarrotAmount3.setSelection(result.length());     // 커서를 제일 끝으로 보냄.
				}                
			}
		}); 

		GridView gridview2 = (GridView) findViewById(R.id.gridview2);
		gridview2.setAdapter(new ButtonAdapter2(this));    
		gridview2.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
				// myCarrotAmount2, saveCarrotAmount2  // 내 마일리지, 적립 마일리지
				//				if(saveCarrotAmount2.getText().length()>10&&!((position==10)||(position==11))){	// 백, 캔슬 제외한 입력키가 아닐때 숫자 오버되면 경고창
				//					Toast.makeText(MainActivityHome.this, "결재 금액이 너무 큽니다.", Toast.LENGTH_SHORT).show();
				//					// myCarrotAmount2.getText().length()<1 &&  --> Toast.makeText(MainActivityHome.this, "먼저 고객님의 QR코드를 스켄해 주십시오.", Toast.LENGTH_SHORT).show();
				//				}else{
				switch(position) {
				case 0 : 	// 1
					setMoney = saveCarrotAmount2.getText()+"1";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"1");
					break;
				case 1 : 	// 2
					setMoney = saveCarrotAmount2.getText()+"2";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"2");
					break;
				case 2 : 	// 3 
					setMoney = saveCarrotAmount2.getText()+"3";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"3");
					break;
				case 3 : 	// 4
					setMoney = saveCarrotAmount2.getText()+"4";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"4");
					break;
				case 4 : 	// 5
					setMoney = saveCarrotAmount2.getText()+"5";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"5");
					break;
				case 5 : 	// 6
					setMoney = saveCarrotAmount2.getText()+"6";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"6");
					break;
				case 6 : 	// 7
					setMoney = saveCarrotAmount2.getText()+"7";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"7");
					break;
				case 7 : 	// 8
					setMoney = saveCarrotAmount2.getText()+"8";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"8");
					break;
				case 8 : 	// 9
					setMoney = saveCarrotAmount2.getText()+"9";
					checkAndSetMoney1();
					//						saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"9");
					break;
				case 9 : 	// 0

					if((saveCarrotAmount2.getText()+"").length()>0){
						setMoney = saveCarrotAmount2.getText()+"0";
						checkAndSetMoney1();
						//							saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"0");
					}
					break;
				case 10 : 	// cancel
					saveCarrotAmount2.setText("");
					break;
				case 11 : 	// del
					String str = saveCarrotAmount2.getText()+"";
					if((saveCarrotAmount2.getText()+"").length()>0){
						saveCarrotAmount2.setText(str.subSequence(0, str.length()-1));
					}
					break;
				case 12 : 	// 00
					if((saveCarrotAmount2.getText()+"").length()>0){
						setMoney = saveCarrotAmount2.getText()+"00";
						checkAndSetMoney1();
						//							saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"00");
					}
					break;
				case 13 : 	// 000
					if((saveCarrotAmount2.getText()+"").length()>0){
						setMoney = saveCarrotAmount2.getText()+"000";
						checkAndSetMoney1();
						//							saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"000");
					}
					break;
				case 14 : 	// 0000
					if((saveCarrotAmount2.getText()+"").length()>0){
						setMoney = saveCarrotAmount2.getText()+"0000";
						checkAndSetMoney1();
						//							saveCarrotAmount2.setText(saveCarrotAmount2.getText()+"0000");
					}
					break;
				default : break;
				}
			}
			//			}    
		});
		GridView gridview3 = (GridView) findViewById(R.id.gridview3);
		gridview3.setAdapter(new ButtonAdapter2(this));    
		gridview3.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
				switch(position) {
				case 0 : 	// 1
					setMoney = useCarrotAmount3.getText()+"1";
					checkAndSetMoney2();
					break;
				case 1 : 	// 2
					setMoney = useCarrotAmount3.getText()+"2";
					checkAndSetMoney2();
					break;
				case 2 : 	// 3 
					setMoney = useCarrotAmount3.getText()+"3";
					checkAndSetMoney2();
					break;
				case 3 : 	// 4
					setMoney = useCarrotAmount3.getText()+"4";
					checkAndSetMoney2();
					break;
				case 4 : 	// 5
					setMoney = useCarrotAmount3.getText()+"5";
					checkAndSetMoney2();
					break;
				case 5 : 	// 6
					setMoney = useCarrotAmount3.getText()+"6";
					checkAndSetMoney2();
					break;
				case 6 : 	// 7
					setMoney = useCarrotAmount3.getText()+"7";
					checkAndSetMoney2();
					break;
				case 7 : 	// 8
					setMoney = useCarrotAmount3.getText()+"8";
					checkAndSetMoney2();
					break;
				case 8 : 	// 9
					setMoney = useCarrotAmount3.getText()+"9";
					checkAndSetMoney2();
					break;
				case 9 : 	// 0
					if((useCarrotAmount3.getText()+"").length()>0){
						setMoney = useCarrotAmount3.getText()+"0";
						checkAndSetMoney2();
					}
					break;
				case 10 : 	// cancel
					useCarrotAmount3.setText("");
					break;
				case 11 : 	// del
					String str = useCarrotAmount3.getText()+"";
					if((useCarrotAmount3.getText()+"").length()>0){
						useCarrotAmount3.setText(str.subSequence(0, str.length()-1));
					}
					break;
				case 12 : 	// 00
					if((useCarrotAmount3.getText()+"").length()>0){
						setMoney = useCarrotAmount3.getText()+"00";
						checkAndSetMoney2();
					}
					break;
				case 13 : 	// 000
					if((useCarrotAmount3.getText()+"").length()>0){
						setMoney = useCarrotAmount3.getText()+"000";
						checkAndSetMoney2();
					}
					break;
				case 14 : 	// 0000
					if((useCarrotAmount3.getText()+"").length()>0){
						setMoney = useCarrotAmount3.getText()+"0000";
						checkAndSetMoney2();
					}
					break;
				default : break;
				}
			}
			//			}    
		});
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	


	// 금액 유효성 검사 후 세팅
	public void checkAndSetMoney1(){
		if(setMoney.length()>11){	// 백, 캔슬 제외한 입력키가 아닐때 숫자 오버되면 경고창
			//			Toast.makeText(MainActivityHome.this, "결재 금액이 너무 큽니다.", Toast.LENGTH_SHORT).show();
			//			showResultDialog(getString(R.string.get_carrot_info_failed));
			showResultDialog(getString(R.string.too_many_nums));
			//			// myCarrotAmount2.getText().length()<1 &&  --> Toast.makeText(MainActivityHome.this, "먼저 고객님의 QR코드를 스켄해 주십시오.", Toast.LENGTH_SHORT).show();
		}else{
			saveCarrotAmount2.setText(setMoney);
		}
	}
	public void checkAndSetMoney2(){
		if(setMoney.length()>11){	// 백, 캔슬 제외한 입력키가 아닐때 숫자 오버되면 경고창
			showResultDialog(getString(R.string.too_many_nums));
		}else{
			useCarrotAmount3.setText(setMoney);
		}
	}
	//콤마 제거
	public String removeComma(String data){
		return data.replaceAll("\\,","");
	}


	/*
	 *  홈2, 홈3 화면에서 하단 닫기 버튼 보일지 여부를 결정	
	 *  30% 가량은 버튼이 보이기 때문에 빼고
	 *  상하단 스켄,적립 소비 버튼과 중간 문구 + 하단 닫기버튼까지가 430 정도를 차지한다.
	 *  전체 높이에서 위의 값들을 빼도 여유가 될 경우(닫기버튼을 둘 수 있는 경우) 버튼을 그냥 두고
	 *   여유가 안될 경우 (뺀 값이 음수가 될 경우) 버튼을 숨기도록 하기 위함이다.
	 */
	public void checkCloseBtnEnable(){
		int height = this.getResources().getDisplayMetrics().heightPixels ;
		int freeHeight = (height*7/10) - 430; 		
		closeBtnEnable = freeHeight>0 ? true : false; 
	}

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, intent);
		if(requestCode == 1) {					// 적립용 스캔인 경우
			if(resultCode == RESULT_OK) {  		// 성공시
				userID = intent.getStringExtra("SCAN_RESULT");
				Log.d(TAG,"userID::"+userID);			
				if(userID.contains("http")){			// URL로 읽었을 경우.
					userID = userID.substring(7);			// 앞의 http:// 을 자른다. (7글자)
				}
				Log.d(TAG,"userID::"+userID);			
				new backgroundCheckMileageExist().execute();	// 고객 정보  가져온다. 런모드(적립:2,조회:3) 에 따라 화면에 값을 보여준다. 
			} else if(resultCode == RESULT_CANCELED) {
				// 취소 또는 실패시 이전화면으로.
				Log.d(TAG,"canceled");
			}
		}
		if(requestCode == 2) {				// 조회용 스캔인 경우
			if(resultCode == RESULT_OK) {  // 성공시
				userID = intent.getStringExtra("SCAN_RESULT");
				Log.d(TAG,"userID::"+userID);			
				if(userID.contains("http")){			// URL로 읽었을 경우. (아이폰)
					userID = userID.substring(7);			// 앞의 http:// 을 자른다. (7글자)
				}
				Log.d(TAG,"userID::"+userID);	
				new backgroundCheckMileageExist().execute();	// 고객 정보  가져온다. 런모드(적립:2,조회:3) 에 따라 화면에 값을 보여준다. 
			} else if(resultCode == RESULT_CANCELED) {
				// 취소 또는 실패시 이전화면으로.
				Log.d(TAG,"canceled");
			}
		}
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	/*
	 * 가맹점 이미지를 가져온다.
	 */
	// 비동기로 이미지 가져오는 처리 수행.
	/**
	 * backgroundLoadImage
	 * 비동기로 가맹점 이미지를 가져온다.
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public class backgroundLoadImage extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundSelectMerchantInformation");
			try {
				prPicture01 = LoadImage(prPicture01Url);
			} catch (Exception e) {
				e.printStackTrace();
			} 
			if(prPicture01==null){
				Log.d(TAG,"prPicture01==null");
				//		    	BitmapDrawable dw = (BitmapDrawable) returnThis().getResources().getDrawable(R.drawable.store_default);
				BitmapDrawable dw = (BitmapDrawable) returnThis().getResources().getDrawable(R.drawable.design_home_no_img);
				prPicture01 = dw.getBitmap();
			}
			showImage();			// 핸들러를 통해 화면에 이미지 보여줌
			return null; 
		}
	}
	// 가맹점 이미지 URL 에서 이미지 받아옴
	/**
	 * LoadImage
	 * 가맹점 이미지 URL 에서 이미지 받아온다(1단계)
	 *
	 * @param imagePath
	 * @param 
	 * @return bm
	 */
	private Bitmap LoadImage( String $imagePath ) {
		InputStream inputStream = OpenHttpConnection( $imagePath ) ;
		Bitmap bm = BitmapFactory.decodeStream( inputStream ) ;
		return bm;
	}
	/**
	 * OpenHttpConnection
	 * 가맹점 이미지 URL 에서 이미지 받아온다(2단계)
	 *
	 * @param imagePath
	 * @param 
	 * @return stream
	 */
	private InputStream OpenHttpConnection(String $imagePath) {
		// TODO Auto-generated method stub
		InputStream stream = null ;
		try {
			URL url = new URL( $imagePath ) ;
			HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection() ;
			urlConnection.setRequestMethod( "GET" ) ;
			urlConnection.connect() ;
			if( urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK ) {
				stream = urlConnection.getInputStream() ;
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			Log.w(TAG,"MalformedURLException");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			Log.w(TAG,"IOException");
		}
		return stream ;
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////	


	/**
	 * 러너블. 고객 정보를 가져온다.
	 */
	class RunnableCheckMileageExist implements Runnable {
		public void run(){
			new backgroundCheckMileageExist().execute();
		}
	}
	/**
	 * backgroundCheckMileageExist
	 * 비동기로  고객 정보를 가져온다.
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public class backgroundCheckMileageExist extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundCheckMileageExist");

			// 파리미터 세팅
			CheckMileageMileage checkMileageMileageParam = new CheckMileageMileage();
			checkMileageMileageParam.setCustomerId(userID);
			checkMileageMileageParam.setMerchantId(merchantId);
			// 호출
			showPb();
			callResult = carrotMemberStoreRest.RestCheckMileageExist(checkMileageMileageParam);
			hidePb();
			// 결과 처리
			if(callResult.equals("S")){
				try {
					// 데이터 세팅부..
					tempstr = carrotMemberStoreRest.getTempstr(); 
					jsonObject = new JSONObject(tempstr);
					JSONObject jsonobj2 = jsonObject.getJSONObject("checkMileageMileage");
					try{
						userMileage =jsonobj2.getString("mileage");
					}catch(Exception e){
						showResultDialog(getString(R.string.get_carrot_info_failed));			// 캐럿 조회에 실패하였습니다.\n 다시 시도해 주십시오.	
						//					showMsg("캐럿 조회에 실패하였습니다.\n 다시 시도해 주십시오.");
					}
					Log.d(TAG,"runMode::"+runMode);
					if(runMode==2){
						showCustomerMileageForSave();		// 화면에 마일리지 값 보여줌
					}else if(runMode==3){
						showCustomerMileageForUse();		// 화면에 마일리지 값 보여줌
					}
				} catch (JSONException e) {
					e.printStackTrace();
				} 
			}else{	
				showResultDialog(getString(R.string.request_failed));	
			}
			return null; 
		}
	}

	/**
	 * 러너블.마일리지를 적립한다.
	 */
	class RunnableRegisterMileage implements Runnable {
		public void run(){
			new backgroundRegisterMileage().execute();
		}
	}
	/**
	 * backgroundRegisterMileage
	 * 비동기로 마일리지를 적립한다.
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public class backgroundRegisterMileage extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundRegisterMileage");

			// 파리미터 세팅
			CheckMileageMileage checkMileageMileageParam = new CheckMileageMileage();
			checkMileageMileageParam.setCustomerId(userID);
			checkMileageMileageParam.setMerchantId(merchantId);
			checkMileageMileageParam.setMileage(userMileage);
			checkMileageMileageParam.setBill(carrotAmount);
			// 호출
			showPb();
			callResult = carrotMemberStoreRest.RestRegisterMileage(checkMileageMileageParam);
			hidePb();
			// 결과 처리
			if(callResult.equals("SUCCESS")){
				showResultDialog(getString(R.string.carrot_save_success));					// 캐럿이 적립되었습니다.	
			}else{
				showResultDialog(getString(R.string.carrot_save_failed));		// 캐럿 적립에 실패하였습니다.\n 다시 시도해 주십시오.
			}
			init();
			return null; 
		}
	}

	/**
	 * 러너블. 현금 마일리지를  적립한다.
	 */
	class RunnableRegisterCashMileage implements Runnable {
		public void run(){
			new backgroundRegisterCashMileage().execute();
		}
	}
	/**
	 * backgroundRegisterCashMileage
	 * 비동기로 현금 마일리지를  적립한다.
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public class backgroundRegisterCashMileage extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundRegisterCashMileage");

			// 파리미터 세팅
			CheckMileageMileage checkMileageMileageParam = new CheckMileageMileage();
			checkMileageMileageParam.setCustomerId(userID);
			checkMileageMileageParam.setMerchantId(merchantId);
			checkMileageMileageParam.setMileage(userMileage);
			checkMileageMileageParam.setBill(carrotAmount);
			// 호출
			showPb();
			callResult = carrotMemberStoreRest.RestRegisterCashMileage(checkMileageMileageParam);
			hidePb();
			// 결과 처리
			if(callResult.equals("SUCCESS")){
				showResultDialog(getString(R.string.carrot_save_success));					// 캐럿이 적립되었습니다.	
			}else{
				showResultDialog(getString(R.string.carrot_save_failed));		// 캐럿 적립에 실패하였습니다.\n 다시 시도해 주십시오.
			}
			init();
			return null; 
		}
	}
	
	/**
	 * 러너블. 마일리지를 사용한다.
	 */
	class RunnableUpdateMileage implements Runnable {
		public void run(){
			new backgroundUpdateMileage().execute();
		}
	}
	/**
	 * backgroundUpdateMileage
	 * 비동기로 마일리지를 사용한다.
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public class backgroundUpdateMileage extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundUpdateMileage");
			
			// 파리미터 세팅
			CheckMileageMileage checkMileageMileageParam = new CheckMileageMileage();
			checkMileageMileageParam.setCustomerId(userID);
			checkMileageMileageParam.setMerchantId(merchantId);
			checkMileageMileageParam.setMileage(userMileage);
			checkMileageMileageParam.setBill(carrotAmount);
			// 호출
			showPb();
			callResult = carrotMemberStoreRest.RestUpdateMileage(checkMileageMileageParam);
			hidePb();
			// 결과 처리
			if(callResult.equals("SUCCESS")){
				showResultDialog(getString(R.string.carrot_use_success));				// 캐럿을 사용하였습니다.
			}else{
				showResultDialog(getString(R.string.carrot_use_failed));			// 캐럿 사용에 실패하였습니다.\n 다시 시도해 주십시오.
			}
			init();
			return null; 
		}
	}

//	/**
//	 * 러너블.  서버에 위치 및 로그 남김
//	 */
//	class RunnableUpdateMileage implements Runnable {
//		public void run(){
//			logViewName = logViewNames;
//			new backgroundUpdateLogToServer().execute();	// 비동기로 전환	
//		}
//	}
//	/**
//	 * 서버에 위치 및 로그 남김
//	 * loggingToServer
//	 */
//	public void loggingToServer(String logViewNames){
//		logViewName = logViewNames;
//		new backgroundUpdateLogToServer().execute();	// 비동기로 전환	
//	}
//	/**
//	 * 비동기로 사용자의 위치 정보 및 정보 로깅
//	 * backgroundUpdateLogToServer
//	 */
//	public class backgroundUpdateLogToServer extends  AsyncTask<Void, Void, Void> { 
//		@Override protected void onPostExecute(Void result) {  
//		} 
//		@Override protected void onPreExecute() {  
//		} 
//		@Override protected Void doInBackground(Void... params) {  
//			Log.d(TAG,"backgroundUpdateMyLocationtoServer");
//			
//			// 파리미터 세팅
//			CheckMileageMileage checkMileageMileageParam = new CheckMileageMileage();
//			checkMileageMileageParam.setCustomerId(userID);
//			checkMileageMileageParam.setMerchantId(merchantId);
//			checkMileageMileageParam.setMileage(userMileage);
//			checkMileageMileageParam.setBill(carrotAmount);
//			// 호출
//			showPb();
//			callResult = carrotMemberStoreRest.RestUpdateMileage(checkMileageMileageParam);
//			hidePb();
//			// 결과 처리
//			if(callResult.equals("SUCCESS")){
//				showResultDialog(getString(R.string.carrot_use_success));				// 캐럿을 사용하였습니다.
//			}else{
//				showResultDialog(getString(R.string.carrot_use_failed));			// 캐럿 사용에 실패하였습니다.\n 다시 시도해 주십시오.
//			}
//			
//			carrotAmount = useCarrotAmount3.getText()+"";
//
//			if(userID.length()<1){
//				showResultDialog(getString(R.string.scan_your_qr_code));			// 고객님의 QR코드를 스캔하여 주십시오.
//			}else{
//				if(carrotAmount.length()>0){
//					carrotAmount = removeComma(carrotAmount);	// 콤마 제거	
//					carrotAmount = Integer.toString(Integer.parseInt(carrotAmount));	// 숫자를 문자로
//				}
//				if(carrotAmount.length()<1 || (carrotAmount.equals("0"))){
//					showResultDialog(getString(R.string.input_use_amount));  		// 사용할 마일리지를 입력해 주십시오.
//				}else if(Integer.parseInt(carrotAmount) > Integer.parseInt(myCarrotAmount3.getText()+"")){		
//					showResultDialog(getString(R.string.not_enough_mileage));  		// 마일리지가 부족합니다.
//					//					showMsg(getString(R.string.not_enough_mileage));
//				}else{
//					showConfirmDialog(3, getString(R.string.confirm_carrot_use));    // 캐럿을 사용하시겠습니까?
//				}
//			}
////			updateLogToServer();
//			return null; 
//		}
//	}
//	/**
//	 * 사용자 위치 정보 및 정보 로깅
//	 * 
//	 */
//	public void updateLogToServer(){
//		if(isUpdating==0){
//			isUpdating = 1;
//			Log.i(TAG, "updateLocationToServer");
//			controllerName = "checkMileageLogController";
//			methodName = "registerLog";
//
//			new Thread(
//					new Runnable(){
//						public void run(){
//							JSONObject obj = new JSONObject();
//							try{
//								// 자신의 아이디를 넣어서 조회
//								Date today = new Date();
//								SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//								String nowDate = sf.format(today);
//
//								Log.d(TAG,"merchantId:"+merchantId);
//								Log.d(TAG,"logViewName:"+logViewName);
//								Log.d(TAG,"nowDate:"+nowDate);
//
//								obj.put("checkMileageId", "");	// checkMileageId 	사용자 아이디
//								obj.put("merchantId", merchantId);		// merchantId		가맹점 아이디.
//								// CheckMileageMerchantAmassView CheckMileageMerchantCheckView // 적립, 차감
//								// CheckMileageMerchantAnnouncementView // CheckMileageMerchantMileageCustomerListView // 공지, 목록
//								// CheckMileageMerchantPreferenceView	// 설정
//								obj.put("viewName", logViewName);		// viewName			출력된 화면.
//								obj.put("parameter01", "");		// parameter01		사용자 전화번호.
//								obj.put("parameter02", "");		// parameter02		위도.
//								obj.put("parameter03", "");		// parameter03		경도.
//								obj.put("parameter04", "");		// parameter04		검색일 경우 검색어.
//								obj.put("parameter05", "");		// parameter05		예비용도.
//								obj.put("parameter06", "");		// parameter06		예비용도.
//								obj.put("parameter07", "");		// parameter07		예비용도.
//								obj.put("parameter08", "");		// parameter08		예비용도.
//								obj.put("parameter09", "");		// parameter09		예비용도.
//								obj.put("parameter10", "");		// parameter10		예비용도.
//								obj.put("registerDate", nowDate);		// registerDate		등록 일자.
//							}catch(Exception e){
//								e.printStackTrace();
//							}
//							String jsonString = "{\"checkMileageLog\":" + obj.toString() + "}";
//							try{
//								postUrl2 = new URL(serverName+"/"+controllerName+"/"+methodName);
//								connection2 = (HttpURLConnection) postUrl2.openConnection();
//								connection2.setConnectTimeout(CommonConstant.serverConnectTimeOut);
//								connection2.setDoOutput(true);
//								connection2.setInstanceFollowRedirects(false);
//								connection2.setRequestMethod("POST");
//								connection2.setRequestProperty("Content-Type", "application/json");
//								//								connection2.connect();
//								Thread.sleep(200);
//								OutputStream os2 = connection2.getOutputStream();
//								os2.write(jsonString.getBytes("UTF-8"));
//								os2.flush();
//								Thread.sleep(200);
//								responseCode = connection2.getResponseCode();
//								// 조회한 결과를 처리.
//								if(responseCode==200 || responseCode==204){
//									Log.d(TAG,"updateLogToServer S");
//								}else{
//									Log.d(TAG,"updateLogToServer F / "+responseCode);
//								}
//							}catch(Exception e){ 
//								e.printStackTrace();
//								Log.d(TAG,"updateLocationToServer->fail");
//							}finally{
//								isUpdating = 0;
//							}
//						}
//					}
//			).start();
//		}else{
//			Log.w(TAG,"already updating..");
//		}
//	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	/**
	 * returnThis
	 * 컨택스트를 리턴한다
	 *
	 * @param 
	 * @param 
	 * @return this
	 */
	public Context returnThis(){
		return this;
	}


	// 화면에 가맹점 이미지 세팅
	/**
	 * showImage
	 *   화면에 가맹점 이미지 세팅한다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void showImage(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showImage", 1);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}
	// 화면에 있는 고객 정보 초기화. 
	/**
	 * init
	 *   화면에 있는 고객 정보 초기화한다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void init(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("init", 1);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}
	// 적립 모드. 고객 마일리지 값을 화면에 표시
	/**
	 * showCustomerMileageForSave
	 *    적립 모드. 고객 마일리지 값을 화면에 표시한다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void showCustomerMileageForSave(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showMileage", 1);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}
	// 소비 모드. 고객 마일리지 값을 화면에 표시
	/**
	 * showCustomerMileageForUse
	 *   소비 모드. 고객 마일리지 값을 화면에 표시한다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void showCustomerMileageForUse(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showMileage", 2);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}

	/*
	 * 핸들러를 통한 작업.
	 */
	// 화면에 토스트 띄움 msg 변수에 내용을 넣어서 호출하면 화면에 토스트를 띄운다.		// --> 통신 에러시에만.
	/**
	 * showMsg
	 *   화면에 토스트 띄움 msg 변수에 내용을 넣어서 호출하면 화면에 토스트를 띄운다
	 *
	 * @param msg
	 * @param 
	 * @return 
	 */
	public void showMsg(final String msg){			
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showToast", 1);
						b.putString("msg", msg);
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	} 


	// 현시각
	/**
	 * getNow
	 * 현시각 전달한다
	 *
	 * @param 
	 * @param 
	 * @return nowTime
	 */
	public String getNow(){
		c = Calendar.getInstance();
		todayYear = c.get(Calendar.YEAR);
		todayMonth = c.get(Calendar.MONTH)+1;			// 꺼내면 0부터 시작이니까 +1 해준다.
		todayDay = c.get(Calendar.DATE);
		todayHour = c.get(Calendar.HOUR_OF_DAY);
		todayMinute = c.get(Calendar.MINUTE);
		todaySecond = c.get(Calendar.SECOND);
		String tempMonth = Integer.toString(todayMonth);
		String tempDay = Integer.toString(todayDay);
		String tempHour = Integer.toString(todayHour);
		String tempMinute = Integer.toString(todayMinute);
		String tempSecond = Integer.toString(todaySecond);
		if(tempMonth.length()==1) tempMonth = "0"+tempMonth;
		if(tempDay.length()==1) tempDay = "0"+tempDay;
		if(tempHour.length()==1) tempHour = "0"+tempHour;
		if(tempMinute.length()==1) tempMinute = "0"+tempMinute;
		if(tempSecond.length()==1) tempSecond = "0"+tempSecond;
		String nowTime = Integer.toString(todayYear)+"-"+tempMonth+"-"+tempDay+" "+tempHour+":"+tempMinute+":"+tempSecond;
		return nowTime;
		//		Log.e(TAG, "Now to millis : "+ Long.toString(c.getTimeInMillis()));
	}

	// 키보드 숨김
	/**
	 * hideKeyboard
	 * 키보드 숨긴다
	 *
	 * @param 
	 * @param 
	 * @return nowTime
	 */
	public void hideKeyboard(){
		imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE );
		imm .hideSoftInputFromWindow(saveCarrotAmount2 .getWindowToken(), 0);
	}


	// 종료 확인
	@Override
	public void onBackPressed() {
		if(runMode==1){
			new AlertDialog.Builder(this)
			.setMessage(getString(R.string.confirm_logout))				//  로그아웃 하시겠습니까?  Are you sure you want to Logout?
			.setCancelable(false)
			.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {		// Yes
				public void onClick(DialogInterface dialog, int id) {
					MainActivityHome.this.finish();
				}
			})
			.setNegativeButton(getString(R.string.no), null)			// No
			.show();
		}else{	// 뒤로가기 버튼으로 화면 닫기.
			homeLayout2.setVisibility(View.INVISIBLE);
			homeLayout3.setVisibility(View.INVISIBLE);
			homeLayout1.setVisibility(View.VISIBLE);
			init();			// 이전값 초기화.
			runMode = 1; 	// 홈 모드
			hideKeyboard();
		}
	}

	/**
	 * showResultDialog
	 *  얼럿을 띄운다.
	 *
	 * @param msg
	 * @param 
	 * @return 
	 */
	public void showResultDialog(final String msg){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showAlert", 1);
						b.putString("msg", msg);			// 화면에 보여줄 메시지
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}
	// 확인을 받는 컨펌 창을 띄운다
	/**
	 * showConfirmDialog
	 * 확인을 받는 컨펌 창을 띄운다
	 *
	 * @param showConfirmCode
	 * @param msg
	 * @return 
	 */
	public void showConfirmDialog(final int showConfirmCode, final String msg){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showConfirm", showConfirmCode);		// 2는 적립, 3은 소비, 4는 현금 적립..
						b.putString("msg", msg);			// 화면에 보여줄 메시지
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}

	// 중앙 프로그래스바 보임, 숨김
	/**
	 * showPb
	 * 중앙 프로그래스바  띄운다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void showPb(){
		new Thread( 
				new Runnable(){
					public void run(){
						Message message = handler .obtainMessage();
						Bundle b = new Bundle();
						b.putInt( "order" , 1);
						message.setData(b);
						handler .sendMessage(message);
					}
				}
		).start();
	}
	/**
	 * hidePb
	 * 중앙 프로그래스바 숨긴다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void hidePb(){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler .obtainMessage();
						Bundle b = new Bundle();
						b.putInt( "order" , 2);
						message.setData(b);
						handler .sendMessage(message);
					}
				}
		).start();
	}


	@Override
	public void onResume(){
		merchantId = MainTabsPage.merchantId;
		countryCode = MainTabsPage.countryCode;
		languageCode = MainTabsPage.languageCode;
		prPicture01Url = MainTabsPage.prPicture01Url;

		if(prPicture01Url.length()>0){
			new backgroundLoadImage().execute();
		}	
		super.onResume();
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
